let AC_GAME_OBJECT= []   // 每秒实现的内容


//引擎
class AcGameObject {
    constructor(){
        AC_GAME_OBJECT.push(this);
        this.has_called_start = false ;  // 是否执行过start
        this.timedelta = 0 ; // 两帧之间的时间间隔 ms
        this.uuid = this.create_uuid();
    }
    
    create_uuid(){
        let res = "";
        for (var i = 0 ; i < 8 ; i++){
            res += Math.floor(Math.random()* 10).toString();
        }
        return res;
    }

    start(){    // 只会在第一帧执行
    }

    update(){   // 每一帧均会执行一次
    }
   
    late_update(){ // 最后一帧会执行一次
        
    }
    on_distory(){      // 在被销毁前执行一次
        
    }
    distory(){        // 删掉该物体
        this.on_distory()
        for(var i = 0 ; i < AC_GAME_OBJECT.length ; i++){
            if (AC_GAME_OBJECT[i] === this){
                AC_GAME_OBJECT.splice(i,1);  //删除
                break;
            }
        }
    }
}
var last_timestamp;   // 上一帧的时间
let AC_GAME_ANIMATION= function(timestamp){
    for( var i = 0 ; i < AC_GAME_OBJECT.length ; i++ ){
        let obj = AC_GAME_OBJECT[i];
        if (!obj.has_called_start){
            obj.start();
            obj.has_called_start=true;
        }else{
            obj.timedelta = timestamp - last_timestamp;
            obj.update();
        }
    }

    for (var i = 0 ; i < AC_GAME_OBJECT.length ; i++){
        let obj = AC_GAME_OBJECT[i];
        obj.late_update();
    }
    last_timestamp = timestamp;
    requestAnimationFrame(AC_GAME_ANIMATION);
    
}

//下一帧执行这个函数 , 每秒执行六十次
requestAnimationFrame(AC_GAME_ANIMATION);
